home *** CD-ROM | disk | FTP | other *** search
- Unit Spooler;
- { Brian Ebarb Power Software Company - Houston, TX (713)781-9784 }
- InterFace
- Uses Dos;
- function Spool(FileString: String; ThePrinter: Byte; Action: byte) : Byte;
- Implementation
- function Spool(FileString: String; ThePrinter: Byte; Action: byte) : Byte;
- Var
- Regs : Registers;
- Fname : array[1..64] of byte;
- TheFile : record
- Byt : Byte;
- Loc : array[1..2] of Word;
- end;
- Tick : integer;
-
- begin
- FileString := FileString+#0;
- FillChar(Fname, 64, #0);
- for Tick := 1 to Length(FileString) do Fname[Tick] := ord(FileString[Tick]);
- TheFile.Byt := ThePrinter - 1;
- TheFile.Loc[2] := Seg(Fname);
- TheFile.Loc[1] := Ofs(Fname);
- Regs.AH := $1; Regs.AL := $0; Intr($2F, Regs);
- if Regs.AL <> 255 then
- begin
- Spool := 10; { on return, 10 = "not installed" }
- Writeln('Spooler not resident!!');
- exit;
- end
- else
- case Action of
- 1: begin { Spool a file }
- with Regs do
- begin
- AH:=$1; AL:=$1; DS:=Seg(TheFile); DX:=Ofs(TheFile);
- end;
- Intr($2F, Regs);
- if Regs.Flags AND FCarry = FCarry then
- Spool := Regs.AX
- else
- Spool := 0;
- end;
- 2: begin {Deque a file }
- with Regs do
- begin
- AH:=$1; AL:=$2; DS:=TheFile.Loc[2]; DX:=TheFile.Loc[1];
- end;
- Intr($2F, Regs);
- if Regs.Flags AND FCarry = FCarry then
- Spool := Regs.AX
- else
- Spool := 0;
- end;
- 3: begin {Deque ALL files }
- Regs.AH := $1; Regs.AL := $3;
- Intr($2F, Regs);
- if Regs.Flags AND FCarry = FCarry then
- Spool := Regs.AX
- else
- Spool := 0;
- end;
- 4: begin { Hold queue, Get Status }
- Regs.AH:=$1; Regs.AL:=$4;
- Intr($2F, Regs);
- if Regs.Flags AND FCarry = FCarry then
- Spool := Regs.AX
- else
- begin
- Spool := Regs.DX;
- { put the contents of DS:SI into FILESTRING }
- end;
- end;
- 5: begin { restart queue after function 4 }
- Regs.AL := $5;
- Intr($2F, Regs);
- if Regs.Flags AND FCarry = FCarry then
- Spool := Regs.AX
- else
- Spool := 0;
- end;
- end;
- end;
- end.